৫ম সেশনে আমরা দেখেছি দুটি সংখ্যা ইনপুট নিয়ে কীভাবে তাদের যোগফল, বিয়োগফল ইত্যাদি বের করতে পারি।
কিন্তু এই কাজটি আমরা ভিন্ন ভিন্ন প্রোগ্রামে করেছি। অর্থাৎ যোগফল বের করার জন্য ভিন্ন প্রোগ্রাম, বিয়োগফল বের করার জন্য ভিন্ন প্রোগ্রাম এভাবে আমরা চিন্তা করেছি। কিন্তু ক্যালকুলেটরের কথা ভাবি।
কখনও কি আমরা দেখেছি একটা ক্যালকুলেটর আছে যা শুধুমাত্র যোগফল বের করতে পারে, কিন্তু কোনো বিয়োগফল বা গুণফল বের করতে পারে না? এভাবে ব্যবহার করতে গেলে তো আমাদের অনেকগুলো ক্যালকুলেটর লাগত!!! এটা তো কোনো ভালো সমাধান নয়। যদি একটা ক্যালকুলেটর বা ডিভাইসে আমরা যোগ, বিয়োগ, গুণ, ভাগ ইত্যাদি সবরকম হিসাবনিকাশ করতে পারি সেটা উত্তম তাই না?
একইভাবে এই কাজগুলো করার জন্য অনেকগুলো ভিন্ন প্রোগ্রাম থাকার চেয়ে একটি প্রোগ্রাম যদি থাকে, যেখানে আমরা সবগুলো কাজ একসাথে করতে পারি, সেটা বেশি ভালো হবে।
কাজেই আমরা এখন এমন একটি প্রোগ্রাম ডিজাইন করার চিন্তা করব, যেখানে একটি প্রোগ্রামেই এই সবগুলো কাজ করতে পারি।
আমরা যদি একটু খেয়াল করে দেখি ৫ম সেশনের প্রোগ্রাম কীভাবে করছিলাম?
আমরা প্রথমে দুটি সংখ্যা ইনপুট নিচ্ছিলাম। আমরা জানতাম সংখ্যাগুলো যোগ বা বিয়োগ বা গুণ কোনো কাজটি করতে চাই। তাই এরপর আমরা অন্য একটি ভ্যারিয়েবলে সেই হিসাবনিকাশ করছিলাম ও সবশেষে আমাদের হিসাবনিকাশের ফলাফল প্রিন্ট করছিলাম।
কিন্তু আমরা যখন একই প্রোগ্রামে যোগ, বিয়োগ ইত্যাদি অনেকগুলো কাজ করার ব্যবস্থা রাখব, আমাদের আরও একটি ইনপুট নিতে হবে, যে ইনপুটে জানাব এই মুহূর্তে কি যোগ করতে চাচ্ছি, নাকি বিয়োগ, নাকি গুণ নাকি ভাগ ইত্যাদি।
এই কাজটা করার জন্য নিচের মতো কোড লিখতে পারব-
op = input('Enter the arithmetic operator [+,-,*,/,%]:')
এই লাইনে আমরা একটি ভ্যারিয়েবল নিয়েছি op
op ভ্যারিয়েবলের মধ্যে আমরা ইনপুট নিয়েছি যোগ, বিয়োগ, গুণ, ভাগ ও মডুলাসের মধ্যে কোন কাজটি করতে চাই।
আমাদের কাছে যেহেতু বেশ কিছু অপশন আছে হিসাবনিকাশ করার জন্য, তাই প্রোগ্রামে একটি শর্ত (Condition) দিতে হবে। আমরা তো ইতোমধ্যে ৬ষ্ঠ সেশনে দেখেছি if, elif, else এর মাধ্যমে কীভাবে শর্ত যাচাই করতে হয় বিভিন্ন ধাপে।
চল একটি কাজ করি। এমন একটি সুডো কোড তৈরি করি, যেখানে আমরা প্রথমে ইনপুট হিসেবে দুটি সংখ্যা গ্রহণ করব ও একটি চিহ্ন ইনপুট নিব (যা দিয়ে বুঝতে পারব এখন যোগ, বিয়োগ, গুণ, ভাগ ও মডুলাসের মধ্যে কোনো কাজটি করতে চাচ্ছি)। তারপর শর্ত যাচাই করে সেই অনুযায়ী ফলাফল বের করব ও সবশেষে ফলাফল প্রিন্ট করব -
নিচের ছকে এমন একটি সুডোকোড লিখে ফেলি
ক = প্রথম সংখ্যা ইনপুট
|
তোমার সুডো কোডে নিশ্চয়ই শর্ত যাচাইয়ের ব্যবস্থা রেখেছ তাই না। প্রোগ্রাম ডিজাইনের সময় আমাদের অবশ্যই নিচের মতো শর্ত যাচাই করতে হবে-
if op = '+':
result = num1 + num2
elif op = '-':
result = num1 - num2
elif op = '*':
result = num1 * num2
elif op = '/:
result = num1/num2
elif op = 10%
result = num1% num2
else: print('Operator is not correct. Result can not be printed.")
প্রতিবারে এখানে যাচাই করা হচ্ছে op এর মান কোনো চিহ্নের সমান।
if op = '*':
result = num1 + num2
অর্থাৎ প্রথমে যাচাই করা হবে op এরমধ্যে আমরা ইনপুট দিয়েছি কি না। যদি শর্ত পূরণ হয়, তাহলে আমরা result ভ্যারিয়েবলের মধ্যে দুটি সংখ্যার যোগফল বের করব। আর যদি শর্ত পূরণ না হয়, পরের শর্তে চলে যাব। এভাবে আমাদের পুরো প্রোগ্রামটি রান হবে। আর যদি কোনো শর্তই পূরণ না হয়, তার মানে হচ্ছে আমরা সঠিক চিহ্ন ইনপুট দিতে পারিনি। তখন else এর ভিতর থাকা লাইনটি প্রিন্ট হবে।
এবারে আমরা যদি পুরো প্রোগ্রামটি লেখি, তাহলে সেটি নিচের অনুরুপ হবে-
খেয়াল করে দেখ তো তোমার সুডো কোডের সাথে এই প্রোগ্রামের কী কী মিল ও অমিল আছে?
তোমার সুডো কোডের সাথে এই প্রোগ্রামের একটি তুলনা নিচের ঘরে লিখে ফেলো -
|
উপরের প্রোগ্রাম রান করে একেকবার একেক ইনপুট দিলে কীরকম আউটপুট পাওয়া যায় সেটা কি বুঝতে পারছ? এরকম যাচাই করে নিচের ছকটি পূরণ করি-
num1 = 12 num2=8 op = * |
প্রথম শর্ত যাচাই- op এর মান কি + ? উত্তর হ্যাঁ হলে ইনপুট দেওয়া দুটি সংখ্যার যোগফল বের করি এরপর ফলাফল প্রিন্ট করি উত্তর না হলে পরের ধাপে চলে যাই |
দ্বিতীয় শর্ত যাচাই- op এর মান কি? উত্তর হ্যাঁ হলে ইনপুট দেওয়া দুটি সংখ্যার বিয়োগফল বের করি এরপর ফলাফল প্রিন্ট করি উত্তর না হলে পরের ধাপে চলে যাই |
তৃতীয় শর্ত যাচাই- op এর মান কি? উত্তর হ্যাঁ হলে ইনপুট দেওয়া দুটি সংখ্যার গুণফল বের করি এরপর ফলাফল প্রিন্ট করি উত্তর না হলে পরের ধাপে চলে যাই |
চতুর্থ শর্ত যাচাই- op এর মান কি।? উত্তর হ্যাঁ হলে ইনপুট দেওয়া দুটি সংখ্যার ভাগফল বের করি এরপর ফলাফল প্রিন্ট করি উত্তর না হলে পরের ধাপে চলে যাই |
পঞ্চম শর্ত যাচাই- op এর মান কি %? উত্তর হ্যাঁ হলে ইনপুট দেওয়া দুটি সংখ্যার মডুলাস (ভাগশেষ) বের করি এরপর ফলাফল প্রিন্ট করি উত্তর না হলে পরের ধাপে চলে যাই |
যদি কোন শর্তই পূরণ না হয়, তাহলে else এর ভিতর থাকা কাজ করব। তাই প্রিন্ট করি - Operator is incorrect. Program will crash now. এরপর আমাদের প্রোগ্রাম ক্র্যাশ করবে। |
আমাদের চূড়ান্ত সিদ্ধান্ত-
|
এখানে একটি বিষয় উল্লেখ্য, সঠিক ইনপুট দেওয়া কিন্তু খুব জরুরি যথাযথ আউটপুট পাবার জন্য। আমরা যদি ভুল ইনপুট দেই op ভ্যারিয়েবলে, তাহলে আমাদের প্রোগ্রাম ক্র্যাশ করবে ও নিচের মতো একটি তথ্য স্ক্রিনে দেখতে পাব-
এটা হচ্ছে আমাদের প্রোগ্রামে ত্রুটি হবার ঝুঁকি। প্রোগ্রাম ডিজাইনে অথবা ইনপুট প্রদানের সময় ভুল করলে এরকম বিভিন্ন সমস্যার সৃষ্টি হতে পারে।
এই প্রোগ্রাম তৈরির সময় আর কোনো ত্রুটি হবার ঝুঁকি কি আছে?
এমন কোনো ঝুঁকি খুঁজে পেলে সেটি নিচের ছকে লিখে ফেলি-
|
আমাদের আশেপাশে অনেক বাস্তব সমস্যা আছে যা কোনো শর্তের উপর নির্ভর করে ফলাফল বা সমাধান পাওয়া যায়। যেমন ধরো তুমি একটি বাগান তৈরি করছ। যদি মাটিতে পর্যাপ্ত পানি থাকে, তুমি গাছে পানি দিবে না। কিন্তু যদি মাটি শুষ্ক থাকে, তুমি গাছে পানি দিবে। অর্থাৎ মাটি শুষ্ক বা পানিতে পূর্ণ থাকার উপর গাছে পানি দেওয়া নির্ভরশীল।
আমরা এটাকে সুডো কোড হিসেবেও লিখতে পারি।
ক = মাটিতে পানির পরিমাণ
যদি ক = অল্প পানি:
গাছে পানি দিব
অথবা যদি ক = বেশি পানি:
গাছে পানি দিব না
Read more